home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
User's Choice Windows CD
/
User's Choice Windows CD (CMS Software)(1993).iso
/
utility3
/
makemdi2.zip
/
APP.C
next >
Wrap
C/C++ Source or Header
|
1992-11-25
|
4KB
|
166 lines
#define _APP_C
//-----------------------------------------------------------------
// APP.C - <description>
//
// MAKEMDI adaptation of Windows 3.1 SDK MAKEAPP system.
//
// MDI application design based on Chapter 7 of
// "Windows 3: A Developer's Guide" by Jeffrey Richter.
//
// Adaptation developed with permission of the author by
// John F. Holliday, Technisoft Corporation
// Telephone: (515) 472-9803, CompuServe: 71271,634
//
// [DMM] 25-Nov-1992: Fixed crashing on exit
// Also tabified file to tabsize of 4
//
// David M. Miller, Business Visions, Inc.
// Telephone: (212) 747-6118
// CompuServe: 72676,327
// internet: dmiller@hera.sbi.com
//-----------------------------------------------------------------
#include "makemdi.h"
APP g_app;
int PASCAL WinMain(HINSTANCE hinst, HINSTANCE hinstPrev,
LPSTR lpszCmdLine, int cmdShow)
{
int exitCode = 1;
// Initialize the APP structure
//
g_app.hinst = hinst;
g_app.hinstPrev = hinstPrev;
g_app.lpszCmdLine = lpszCmdLine;
g_app.cmdShow = cmdShow;
g_app.hWndFrame = NULL;
// Initialize, run, and terminate the application
//
if (App_Initialize(&g_app)) {
exitCode = App_Main(&g_app);
App_Terminate(&g_app, FALSE);
}
return exitCode;
}
int App_Main(APP * papp)
{
while (TRUE) {
MSG msg;
// If a message exists in the queue, translate and dispatch it.
//
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
// If it's time to quit, return exit code
//
if (msg.message == WM_QUIT)
return (int) msg.wParam;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else {
// No messages: do idle processing.
// If the app is idle, just wait for another message.
//
if (App_Idle(papp))
WaitMessage();
}
}
}
BOOL App_Initialize(APP * papp)
{
BOOL bResult = FALSE;
if (papp->hinstPrev) {
// Only one instance allowed.
HWND hWnd, hWnd1;
hWnd = FindWindow(CLASS_FRAME, NULL);
if (IsWindow(hWnd)) {
hWnd1 = GetLastActivePopup(hWnd);
if (IsWindow(hWnd1))
hWnd = hWnd1;
BringWindowToTop(hWnd);
if (IsIconic(hWnd))
ShowWindow(hWnd, SW_RESTORE);
SetFocus(hWnd);
}
return FALSE;
}
// Initialize the frame class and all MDI child window classes
// before creating and showing the top level frame instance.
if (Frame_Initialize(papp) && Client_Initialize(papp)) {
LoadString(papp->hinst, IDS_APPNAME, papp->szName, sizeof(papp->szName));
LoadString(papp->hinst, IDS_APPCAPTION, papp->szBuf, sizeof(papp->szBuf));
papp->hWndFrame = Frame_CreateWindow(
papp->szBuf,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
papp->hinst);
if (papp->hWndFrame != NULL) {
bResult = TRUE;
ShowWindow(papp->hWndFrame, papp->cmdShow);
}
}
return bResult;
}
void App_Terminate(APP * papp, BOOL fEndSession)
//-----------------------------------------------------------------
// Flush any caches and buffers to disk, if necessary.
//
// If fEndSession is TRUE, it is not necessary to
// destroy windows, GDI objects, or free memory.
//-----------------------------------------------------------------
{
if (!fEndSession) {
Client_Terminate(papp);
Frame_Terminate(papp);
}
}
BOOL App_Idle(APP * papp)
//-----------------------------------------------------------------
// Return TRUE if the app is idle, FALSE if there is more work to do.
//
// NOTE: To implement background processing, perform the next chunk
// of the pending background process now, then return FALSE if there
// is more background processing to be done. Return TRUE only if
// all background processing is completed.
//-----------------------------------------------------------------
{
return TRUE;
}